home *** CD-ROM | disk | FTP | other *** search
-
- /* ┌─────────────────────┐
- * │ EDITOR DIRMES.SYS │
- * └─────────────────────┘
- */
-
- // INCLUDEs
-
- #include <windows.h>
- #include "ghs.h"
- #include "struct.h"
-
- // PROTOTIPOS
-
- long FAR PASCAL WndProc ( HWND , WORD , WORD , LONG );
- BOOL FAR PASCAL EditarMsg ( HWND , WORD , WORD , LONG );
- BOOL FAR PASCAL OpcionSalida ( HWND , WORD , WORD , LONG );
- void PasaListAMemoria ( HWND );
- void GestErr ( HWND , int );
- void VisualizarListado ( int, int );
- void PasarListADisco ( HWND );
-
- // DEFINEs
-
- #define MAXNUMMSG 5000
- //#define DEBUG
- #define LEP 22 // lineas en pantalla
-
- // VARIABLES GROBALES
-
- HANDLE hInst;
- char szAppName[]="Editor DIRMES.SYS v1.0 (920812)";
- HANDLE hElemLista[MAXNUMMSG];
- int nNumMsg=0;
- HWND hListBox;
- HWND hScrollBar;
- char tipe[]="ABPT", status[]="$AFKNY";
-
- int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
- {
- HWND hwnd;
- MSG msg;
- WNDCLASS wc;
- int n;
-
- if (!hPrevInstance)
- {
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = COLOR_WINDOW+1;
- wc.lpszMenuName = "Menu";
- wc.lpszClassName = szAppName;
- RegisterClass(&wc);
- }
-
- hwnd = CreateWindow
- (szAppName,szAppName,WS_MAXIMIZE|WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_VSCROLL,
- CW_USEDEFAULT,CW_USEDEFAULT,630,400,NULL,NULL,hInstance,NULL);
-
-
- ShowWindow (hwnd, nCmdShow) ;
- UpdateWindow (hwnd);
- hInst=hInstance;
- hScrollBar=hwnd;
-
- while(GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
-
- /* WndProc
- * -------
- * Funcion principal, aqui se redirigen todos los mensajes que se generan
- * en la pantalla principal.
- */
- long FAR PASCAL WndProc(HWND hwnd,WORD message,WORD wParam,LONG lParam)
- {
-
- TEXTMETRIC tm;
- HDC hdc;
- char szCosa[100],szCosaDos[200];
- bullist FAR *lplm;
- RECT rect;
- static int rosa,nOffset=0;
- int f,y;
- BOOL bFlagListBox=FALSE;
-
-
- switch (message)
- {
- case WM_CREATE :
- // inicializamos ARRAY de handles
- for (y=0;y!=MAXNUMMSG;y++)hElemLista[y]=NULL;
- hdc=GetDC(hwnd);
- SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
- GetTextMetrics(hdc,&tm);
-
- GetClientRect( hwnd, &rect);
-
- // creamos dinamicamente una LISTBOX
- hListBox=CreateWindow("listbox",NULL,WS_CHILDWINDOW|WS_VISIBLE,
- 0,0,rect.right,rect.bottom,hwnd,1,
- GetWindowWord(hwnd,GWW_HINSTANCE),NULL);
-
- PasaListAMemoria(hwnd);
- wsprintf(szCosa,"%d mensajes en su DIRMES.SYS !\nSi te gusta el PRG, enviame un MSG/QSL",nNumMsg);
- MessageBox(GetFocus(),szCosa," ",MB_OK);
- SetScrollRange(hScrollBar,SB_VERT,0,nNumMsg,FALSE);
- VisualizarListado(0,LEP);
- break;
-
- case WM_DESTROY :
- DialogBox(hInst, "Salir", hwnd, MakeProcInstance (OpcionSalida ,hInst));
- return 0 ;
-
- case WM_VSCROLL :
- switch ( wParam )
- {
- case SB_PAGEDOWN:
- // desplaza hacia abajo 5*n entradas
- nOffset+=10;
- bFlagListBox=TRUE;
- break;
- case SB_LINEDOWN:
- // desplaza hacia abajo n entradas
- nOffset++;
- bFlagListBox=TRUE;
- break;
- case SB_PAGEUP:
- nOffset-=10;
- bFlagListBox=TRUE;
- break;
- case SB_LINEUP:
- nOffset--;
- bFlagListBox=TRUE;
- break;
- }
- if (!bFlagListBox)break;
- bFlagListBox=FALSE;
- if (nOffset<0)nOffset=0;
- if ( (nOffset*LEP)>nNumMsg ) nOffset=(int)(nNumMsg/LEP);
- VisualizarListado(nOffset*LEP, (nOffset*LEP)+LEP);
- SetScrollPos(hScrollBar,SB_VERT,nOffset*LEP,TRUE);
- break;
-
- case WM_COMMAND:
- switch (wParam)
- {
- case IDM_SALIR:
- DialogBox(hInst, "Salir", hwnd, MakeProcInstance (OpcionSalida ,hInst));
- break;
-
- case IDM_VER:
- rosa=(int)(WORD)SendMessage(hListBox,LB_GETCURSEL,0,0L);
- if(hElemLista[(nOffset*LEP)+rosa]==NULL)
- {
- GestErr(hwnd,6);
- break;
- }
- lplm=(bullist FAR *)GlobalLock( hElemLista[(nOffset*LEP)+rosa] );
- wsprintf(szCosaDos,"[Posicion Absoluta: %d]\nTipo/Estado: %c%c\nNumero: %ld\nTama±o: %ld\nFecha: %ld\nBbsf: %s\nBbsv: %s\nExped: %s\nDesti: %s\nBid: %s\nTitulo: %s\nUltimo cambio: %ld ",
- (nOffset*LEP)+rosa,
- lplm->type,
- lplm->status,
- lplm->numero,
- lplm->taille,
- lplm->date,
- lplm->bbsf,
- lplm->bbsv,
- lplm->exped,
- lplm->desti,
- lplm->bid,
- lplm->titre,
- lplm->datech);
-
- MessageBox(GetFocus(),szCosaDos,"┐ Que te parece el MSG ?",MB_OK);
- break;
-
- case IDM_BORRAR:
- rosa=(int)(WORD)SendMessage(hListBox,LB_GETCURSEL,0,0L);
- GlobalFree( hElemLista[(nOffset*LEP)+rosa] );
- hElemLista[(nOffset*LEP)+rosa]=NULL;
- VisualizarListado(nOffset*LEP, (nOffset*LEP)+LEP);
- // deleted!
- break;
-
- case IDM_EDITAR:
- //DialogBox(hInst, "EditarMsg", hwnd, MakeProcInstance (EditarMsg,hInst));
- break;
-
- case IDM_ACERCADE:
- MessageBox(GetFocus(),
- "Mini-Editor experimental del DIRMES.SYS para software de BBS de F6FBB (FBBBBS 5.14)\nEduardo EA3GHS@ea3rdl.eal.esp.eu",
- "Acerca de..",MB_OK|MB_ICONINFORMATION);
- break;
- }
- }
- return DefWindowProc (hwnd, message, wParam, lParam) ;
- }
-
- /* OpcionSalida
- * ------------
- *
- */
- BOOL FAR PASCAL OpcionSalida(HWND hDlg,WORD message,WORD wParam,LONG lParam)
- {
- switch(message)
- {
- case WM_DESTROY :
- PostQuitMessage (0) ;
- return 0 ;
-
- case WM_COMMAND:
- switch (wParam)
- {
- case IDCANCEL:
- EndDialog(hDlg, TRUE);
- break;
- case IDOK:
- PasarListADisco(hDlg);
- case ID_SALIRSINGRABAR:
- PostQuitMessage (0) ;
- break;
- }
- break;
- }
- return (FALSE);
- }
-
-
- void PasarListADisco( HWND hWnd)
- {
- HANDLE hFichero;
- OFSTRUCT OfStruct;
- int n,nErr;
- char szFichero[]="DIRMES.OK";
- bullist FAR *lplm;
-
- hFichero=OpenFile((LPSTR)szFichero,(LPOFSTRUCT)&OfStruct,OF_CREATE|OF_WRITE);
- if (hFichero==-1) GestErr(hWnd,7);
-
- for(n=0;n!=MAXNUMMSG;n++)
- {
- if(hElemLista[n]==NULL) continue;
- lplm=(bullist FAR *)GlobalLock( hElemLista[n] );
- nErr= _lwrite(hFichero,(LPSTR)lplm , (WORD)sizeof( bullist ));
- if (nErr==-1) GestErr(hWnd,8);
- GlobalUnlock(hElemLista[n]);
- GlobalFree (hElemLista[n]);
- }
-
- _lclose(hFichero);
- }
-
-
- void PasaListAMemoria(HWND hWnd)
- {
- HANDLE hFichero;
- LPSTR pTemp;
- OFSTRUCT OfStruct;
- int n,nErr;
- char szFichero[]="DIRMES.SYS";
-
- hFichero=OpenFile((LPSTR)szFichero,(LPOFSTRUCT)&OfStruct,OF_READWRITE);
- if (hFichero==-1) GestErr(hWnd,1);
-
- while(TRUE)
- {
- hElemLista[nNumMsg]=GlobalAlloc (GMEM_MOVEABLE | GMEM_ZEROINIT, sizeof (bullist) );
- if(hElemLista[nNumMsg]==NULL) GestErr(hWnd,2);
- pTemp=GlobalLock( hElemLista[nNumMsg] );
-
- nErr= _lread(hFichero, pTemp, (WORD)sizeof (bullist) );
- if(nErr==-1) GestErr(hWnd,3);
- if (nErr==0) break;
- GlobalUnlock (hElemLista[nNumMsg]);
- nNumMsg++;
- }
-
- GlobalUnlock(hElemLista[nNumMsg]);
- GlobalFree (hElemLista[nNumMsg]);
- _lclose(hFichero);
- }
-
-
-
- /* GestErr
- * -------
- * Gestiona los errores en la carga de archivos
- */
- void GestErr (HWND hWnd, int errno)
- {
- int nItem;
- char szBuffer[200];
-
- LoadString(hInst,errno,szBuffer,200);
- MessageBox(hWnd,szBuffer,NULL,MB_OK | MB_ICONHAND);
-
- #ifndef DEBUG
- PostQuitMessage(1);
- #endif
- }
-
-
- void VisualizarListado( int n,int m )
- {
- bullist FAR *lplm;
- char szString[200];
- int h;
- BOOL bError,bErrorDos;
-
- // if(n>nNumMsg) GestErr(GetFocus(),5);
- SendMessage(hListBox,WM_SETREDRAW,FALSE,0L);
- SendMessage (hListBox,LB_RESETCONTENT,0,0L);
- for(n;n!=m;n++)
- {
- /* todas las fichas vacias, aparecen como NULL */
- if(hElemLista[n]==NULL)
- {
- SendMessage(hListBox, LB_ADDSTRING, 0, (LONG)(LPSTR)"BORRADA");
- continue;
- }
-
- bError=TRUE;
- bErrorDos=TRUE;
-
- lplm=(bullist FAR *)GlobalLock( hElemLista[n] );
-
- /* comprueba la consistencia de la ficha, si nota que hay algun error,
- * aparece en la listbox como ficha "no consistente"
- */
-
- for(h=0;tipe[h]!='\0';h++) if(lplm->type==tipe[h]) bError=FALSE;
- for(h=0;status[h]!='\0';h++) if(lplm->status==status[h]) bErrorDos=FALSE;
-
- if (bError||bErrorDos)
- {
- SendMessage(hListBox, LB_ADDSTRING, 0, (LONG)(LPSTR)"FICHA NO CONSISTENTE (PUEDES BORRARME)");
- GlobalUnlock( hElemLista[nNumMsg] );
- continue;
- }
-
- wsprintf(szString,"%ld [%c%c] [%s -> %s@%s] %s",lplm->numero,lplm->type, lplm->status,
- lplm->exped, lplm->desti, lplm->bbsv, lplm->titre);
- SendMessage(hListBox, LB_ADDSTRING, 0, (LONG)(LPSTR) szString);
- GlobalUnlock( hElemLista[nNumMsg] );
- }
-
- SendMessage(hListBox,WM_SETREDRAW,TRUE,0L);
-
- }
-